package devcken.net.socket;

import java.util.HashMap;
import java.util.Map;

/**
 * 패킷의 유형을 열거한다.
 * @author Devcken
 */
public enum PacketType
{
	/**
	 * Byte 배열을 전송하는 패킷을 나타낸다.
	 */
	Raw(0x00),
	
	/**
	 * 직렬화된 객체를 전송하는 패킷을 나타낸다.
	 */
	Serialized(0x01),
	
	/**
	 * 파일을 전송하는 패킷을 나타낸다.
	 */
	File(0x04),
	
	/**
	 * 문자열 메시지를 전송하는 패킷을 나타낸다.
	 */
	Message(0x08);
	
	public final byte value;
	
	public final static int Size = Byte.SIZE;
	
	private static final Map<Byte, PacketType> _map = new HashMap<Byte, PacketType>();
	
	static
	{
		for (PacketType item : PacketType.values())
		{
			_map.put(item.value, item);
		}
	}
	
	private PacketType(int value)
	{
		this((byte)value);
	}
	
	private PacketType(byte value)
	{
		this.value = value;
	}

	public byte value()
	{
		return this.value;
	}
	
	public static PacketType convert(byte value)
	{
		return _map.get(value);
	}
	
	public static boolean convert(byte value, PacketType packetType)
	{
		boolean result = _map.containsKey(value);
		
		if (result)
		{
			packetType = _map.get(value);
		}
		
		return result; 
	}
}
